package com.wyix;

import com.wyix.entity.MagicPocket;
import com.wyix.entity.Pet;

/**
 * @author wangdx
 * @since 2025/8/5
 */
public class GenericsDemo {
    public static void main(String[] args) {
        // 案例1：装咒语的口袋（String类型）
        MagicPocket<String> spellPocket = new MagicPocket<>();
        spellPocket.castMagic("漂浮咒");  // 泛型方法自动推断类型
        spellPocket.put("阿瓦达索命咒×禁止使用×");  // 类型安全检查（只能放String）
        String spell = spellPocket.take();

        // 案例2：装魔药数量的口袋（Integer类型）
        MagicPocket<Integer> potionPocket = new MagicPocket<>();
        potionPocket.castMagic("调配咒");
        potionPocket.put(3);  // 自动装箱为Integer
        int count = potionPocket.take();  // 自动拆箱
        System.out.println("今日魔药配额：" + count + "瓶");

        // 案例3：装魔法宠物的口袋（自定义Pet类型）
        MagicPocket<Pet> petPocket = new MagicPocket<>();
        petPocket.castMagic("召唤咒");
        petPocket.put(new Pet("火凤凰"));  // 存储自定义对象
        Pet myPet = petPocket.take();

        // 案例4：通配符演示（查看任意类型的口袋）
        showPocketContent(spellPocket);  // 传入String类型口袋
        showPocketContent(potionPocket);  // 传入Integer类型口袋
    }

    // 泛型通配符方法（?表示任意类型）
    private static void showPocketContent(MagicPocket<?> pocket) {
        System.out.println("当前口袋神秘内容：" + pocket.take());
    }
}
